複数のcontext manager を扱う¶
あまりにも雑だったので用途を書いたけど、不適切っぽいのでドキュメントどおりに適切に使おう
contextlib.RxitStack¶
# 普通の書き方
with open('f1.txt') as f1, \
open('f2.txt', 'w') as f2:
for line in f1:
f2.write(line)
# http://docs.python.jp/3/library/contextlib.html#contextlib.ExitStack
from contextlib import ExitStack
with ExitStack() as stack:
# すっきり書けている感じがするが、特に意味がない
f1 = stack.enter_context(open('f1.txt'))
f2 = stack.enter_context(open('f2.txt', 'w'))
# 条件によって、追加でcontext managerを扱う
# (with statementがないので、明示的でない)
line_count = sum(1 for _ in f1)
if line_count > 2:
f3 = stack.enter_context(open('f3.txt', 'w'))
f3.write(str(line_count))